/*
 * 版权声明 (c) 2025 XXX科技有限公司
 *
 * 本软件及其相关文档文件受版权保护。未经版权所有者明确书面许可，任何单位或个人不得
 * 以任何形式复制、传播、修改、出售、出租、反向工程、反编译或利用本软件的任何部分。
 *
 * 对于任何违反本声明的行为，版权所有者保留追究法律责任的权利。
 */

#ifndef CONTEXT_H
#define CONTEXT_H

#include <string>
#include <unordered_map>
#include "config.h"

#define MODULE_GATEWAY "Gateway" // 网关模块
#define MODULE_AGENT "Agent"     // 代理模块
#define MODULE_SYNC "Sync"       // 同步模块
#define MODULE_ROUTER "Router"   // 路由模块
#define MODULE_CACHE "Cache"     // 缓存模块
#define MODULE_SESSION "Session" // 会话模块

using namespace std;

// 前向声明,防止循环引用
class Module;

// 全局上下文
class Context {
public:
	explicit Context(Config &conf);

	Config &Conf() const;

	// 注册模块
	void Reg(const string &name, Module *module);

	// 获取模块
	Module *Mod(const string &name);

private:
	Config &config;
	unordered_map<string, Module *> modules;
};

#endif // CONTEXT_H
